Classificação Estelar

Área de aplicação: Astronomia

Algoritmos utilizados:

  • Naive Bayes
  • Random Forest
  • Decision Tree
  • KNN

Base de dados utilizada

Link

Sobre a base

Os dados consistem em 100.000 observações do espaço obtidas pelo SDSS (Sloan Digital Sky Survey). Cada observação é descrita por 17 colunas de características e 1 coluna de classe que a identifica como uma estrela, galáxia ou quasar.

Algumas colunas presentes no dataset:

  • alfa - Ângulo de ascensão reta
  • delta - Ângulo de declinação
  • u - Filtro ultravioleta no sistema fotométrico
  • g - Filtro verde no sistema fotométrico
  • r - Filtro vermelho no sistema fotométrico
  • i - Filtro infravermelho próximo no sistema fotométrico
  • z - Filtro infravermelho no sistema fotométrico
  • redshift - valor do redshift com base no aumento do comprimento de onda

Pré-Processamento utilizado

Descrição da atividade

  1. Ao menos um método de pré-processamento deve ser usado, gerando uma nova base de dados.
  2. O tipo de pré-processamento utilizado deve estar relacionado ao contexto da aplicação.
  3. Remoção de vírgulas, espaços em branco, identificador dos padrões, etc. não serão considerados pré-processamento válidos.
MinMaxScaler:

Utilizada para dimensionar (ou normalizar) os recursos em um intervalo especifico, geralmente entre 0 e 1 ou -1 e 1

Funcionamento:

Onde:

  • é o valor normalizado do recurso
  • é o valor original do recurso
  • é o valor mínimo do recurso
  • é o valor máximo do recurso
StandardScaler

Garante que os recursos tenham uma média zero e um desvio padrão comum

Funcionamento:

Onde:

  • é o valor original da característica
  • é a média da característica
  • é o desvio padrão da característica

Processando as bases:

# Base sem processamento
brute_X = brute_df.drop(columns=['obj_ID',
                                 'field_ID',
                                 'spec_obj_ID',
                                 'fiber_ID',
                                 'plate',
                                 'run_ID',
                                 'rerun_ID',
                                 'MJD',
                                 'class']).to_numpy()
 
# Classes
y = brute_df['class'].to_numpy()
 
# Base minMax. -1 : 1
minmax_scaler = MinMaxScaler(feature_range=(-1, 1))
minmax_X = minmax_scaler.fit_transform(brute_X)
 
# Base stardard
standard_scaler = StandardScaler()
standard_X = standard_scaler.fit_transform(brute_X)

Execução

Descrição da atividade

  1. Deve-se executar o 10-fold cross-validation 5 vezes para cada base de dados, com cada uma das cinco execuções partindo de uma distribuição aleatória dos dados entre cada fold, resultando em um total de 50 experimentos por base de dados (10 x 5).
  2. Em cada um dos 50 experimentos, os conjuntos de treinamento e teste devem ser mantido o mesmo para cada algoritmo a ser testado (mesmo ponto de partida para cada modelo), de modo a obter-se uma avaliação justa dos resultados.
  3. Ao menos três algoritmos devem ser testados e comparados:
    1. Árvore de Decisão;
    2. Naïve Bayes;
    3. K-Vizinhos Mais Próximos (K-NN) - variando-se 3 vezes o número do parâmetro k;
    4. Rede Neural Artificial treinada por Backpropagation.
    5. Outros Algoritmos de Aprendizagem Supervisionada (Classificadores) mediante validação prévia do Professor.

Definindo condições do projeto:

seeds = [2, 4, 8, 16, 32]
folds=10
algorithms = [rf, nb, knn, dt]
databases = [brute_X, minmax_X, standard_X]
  • seeds - garantindo que os valores ‘aleatórios’ sejam os mesmos para cada uma das 5 interações
  • folds - quantia de folds para o cross validation
  • algorithms - Algoritmos utilizados
    • RandomForest()
    • NaiveBayes()
    • KNN()
    • DecisionTree()

Executando:

Código resumido

Visando evitar excesso de informação no bloco de código, todas as linhas coletando dados (tempos de execução e tratamento dos scores) foram removidas deste resumo

# Para cada base de dados (brute_X, processed_X)
for index, X in enumerate(databases):
 
  # Ao menos três algoritmos devem ser testados e comparados
  for algorithm in algorithms:
 
    # Cinco execuções partindo de uma distribuição aleatória
    # dos dados entre cada fold
    for seed in seeds:
      knn.n_neighbors = seed
 
      # Definindo a aleatoriedade dos folds
      kf = KFold(n_splits=folds,
                 shuffle=True,
                 random_state=seed)
 
      scores = cross_validate(algorithm,
                              X,
                              y,
                              cv=kf,
                              scoring=scoring_names)
 

Resultados obtidos


Base bruta

Tempo total: 38 minutos

AlgoritmoAcurácia médiaPrecisão médiaRecall médioF1 médioTempo médio por seedTempo total
Random Forest0.9788290.9787260.9788290.978694416.1222080.612
NaiveBayes0.7505960.7944170.7505960.6944323.37716.886
Knn0.8162180.8168190.8162180.80293314.09170.453
Decision Tree0.9648010.9648810.9648010.96483523.168115.840

Base MinMax

Tempo total: 35 minutos

AlgoritmoAcurácia médiaPrecisão médiaRecall médioF1 médioTempo médio por seedTempo total
Random Forest0.9777690.9776570.9777690.977631379.5741897.870
NaiveBayes0.7630920.8057370.7630920.7188663.57317.865
Knn0.9025160.9059920.9025160.90115717.30486.521
Decision Tree0.9633680.9634470.9633680.96340022.341111.706

Base Standard

Tempo total: 38 minutos

AlgoritmoAcurácia médiaPrecisão médiaRecall médioF1 médioTempo médio por seedTempo total
Random Forest0.9787670.9786630.9787670.978632414.9712074.855
NaiveBayes0.7632600.8058520.7632600.7191093.36616.828
Knn0.9147890.9169560.9147890.91389920.085100.425
Decision Tree0.9646590.9647440.9646590.96469423.172115.859

Acurácia:

Precisão (média):

Recall (média):

F1 (média):

Considerações Finais

Sobre as bases:

  • O pré-processamento minMax precisou de menos tempo para toda a execução.
  • A base bruta teve resultados consideravelmente inferiores nos algoritmos Naive Bayes e KNN.
  • A diferença de resultados entre a base minMax e standard só foi notória (ainda que pouco) no KNN.
  • Algoritmos baseados em árvores de decisão tiveram resultado similar entre a base bruta e a standard. Enquanto a minMax teve resultados um pouco inferiores

Sobre os algoritmos:

  • Algoritmos baseados em árvores de decisão (RF, DT) mantiveram quase os mesmos resultados entre as bases.
  • O KNN foi o mais afetado negativamente com a falta de um pré-processamento

Referências

  • BAQUI, P. O.; MARRA, V.; CASARINI, L.; ANGULO, R.; DÍAZ-GARCÍA, L. A.; HERNÁNDEZ-MONTEAGUDO, C.; LOPES, P. A. A.; LÓPEZ-SANJUAN, C.; MUNIESA, D.; PLACCO, V. M.; QUARTIN, M.; QUEIROZ, C.; SOBRAL, D.; SOLANO, E.; TEMPEL, E.; VARELA, J.; VÍLCHEZ, J. M.; ABRAMO, R.; ALCANIZ, J.; … TAYLOR, K. The miniJPAS survey: star-galaxy classification using machine learning. Astronomy & Astrophysics. [S. l.]: EDP Sciences, jan. 2021. DOI 10.1051/0004-6361/202038986. Disponível em: http://dx.doi.org/10.1051/0004-6361/202038986
  • CHAO, Li; WEN-HUI, Zhang; JI-MING, Lin. Study of Star/Galaxy Classification Based on the XGBoost Algorithm. Chinese Astronomy and Astrophysics. [S. l.]: Elsevier BV, out. 2019. DOI 10.1016/j.chinastron.2019.11.005. Disponível em: http://dx.doi.org/10.1016/j.chinastron.2019.11.005.
  • NOLTE, Aleke; WANG, Lingyu; BILICKI, Maciej; HOLWERDA, Benne; BIEHL, Michael. Galaxy classification: A machine learning analysis of GAMA catalogue data. Neurocomputing. [S. l.]: Elsevier BV, maio 2019. DOI 10.1016/j.neucom.2018.12.076. Disponível em: http://dx.doi.org/10.1016/j.neucom.2018.12.076.
  • CLARKE, A. O.; SCAIFE, A. M. M.; GREENHALGH, R.; GRIGUTA, V. Identifying galaxies, quasars, and stars with machine learning: A new catalogue of classifications for 111 million SDSS sources without spectra. Astronomy & Astrophysics. [S. l.]: EDP Sciences, jul. 2020. DOI 10.1051/0004-6361/201936770. Disponível em: http://dx.doi.org/10.1051/0004-6361/201936770.